/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package presenter;

import boundary.ListarClientesView;
import collection.CollectionCliente;
import controladora.AutenticaCliente;
import entity.Cliente;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author jakson
 */
public class ListarClientePresenter {

    private ListarClientesView view;
    private controladora.AutenticaCliente cliente = new AutenticaCliente();
    private collection.CollectionCliente clientes = new CollectionCliente();
    private Cliente G = new Cliente("", "", "", "", "", "", "", "");
    private ArrayList<Cliente> agen = new ArrayList<Cliente>();
    private int WIDTH;

    public ListarClientePresenter(String criaConta) {

        view = new ListarClientesView(null, true);
        clientes = new CollectionCliente();
        agen = clientes.getClientes();
        if (criaConta.equals("criaConta")) {
            view.getBtnEditar().setVisible(false);
            view.getBtnNovo().setVisible(false);
            view.getBtnExcluir().setVisible(false);
            view.getBtnDesbloquear().setVisible(false);
            view.getBtnCriarConta().setVisible(true);
            view.getBtnCriarConta().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    chamarCriarConta();
                }
            });



        }
        else if (criaConta.equals("desbloquear")) {
            view.getBtnEditar().setVisible(false);
            view.getBtnNovo().setVisible(false);
            view.getBtnExcluir().setVisible(false);
            view.getBtnDesbloquear().setVisible(true);
            view.getBtnCriarConta().setVisible(false);

            view.getBtnDesbloquear().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    desbloquearSenha();
                }
            });

        } else {
            view.getBtnCriarConta().setVisible(false);
            view.getBtnDesbloquear().setVisible(false);



            view.getBtnNovo().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    chamarAddClientesPresenter();
                }
            });

            view.getBtnEditar().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    editar();
                }
            });

            view.getBtnExcluir().addActionListener(new ActionListener() {

                @Override
                public void actionPerformed(ActionEvent ae) {
                    excluir();
                }
            });



        }
        view.getBtnFechar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                fechar();
            }
        });
        carregaClientes(agen);
        view.setLocationRelativeTo(view);
        view.setVisible(true);
    }

    private void fechar() {
        view.dispose();


    }

    private void chamarAddClientesPresenter() {
        new AddClientesPresenter("novo", null);
    }

    private void excluir() {

        collection.CollectionCliente gerente = new CollectionCliente();
        if (view.getTabelaCliente().getSelectedRow() < 0) {
            JOptionPane.showMessageDialog(null, "selecione uma linha para excluir", "ERRO", WIDTH);
        } else {
            if (JOptionPane.showConfirmDialog(null, "Tem certeza que realmente deseja excluir a Agência", "Sistema Bancário", 0, 3) == 0) {
                gerente.excluirCliente(view.getTabelaCliente().getValueAt(view.getTabelaCliente().getSelectedRow(), 0).toString());
                view.revalidate();

            }
        }
    }

    private void editar() {

        if (view.getTabelaCliente().getSelectedRow() < 0) {
            JOptionPane.showMessageDialog(null, "selecione uma linha para editar", "ERRo", WIDTH);
        } else {

            clientes.editar(view.getTabelaCliente().getValueAt(view.getTabelaCliente().getSelectedRow(), 0).toString());


        }


    }

    public void carregaClientes(ArrayList agencias) {

        DefaultTableModel tm = new DefaultTableModel(
                new Object[][]{},
                new String[]{"Nome", "Endereço", "Usuário", "Pessoa", "Cpf", "Data Nasc.", "Cnpj", "Data Abert."}) {

            @Override
            public boolean isCellEditable(int row, int col) {
                return false;
            }
        };

        tm.setNumRows(0);
        for (int i = 0; i < agencias.size(); i++) {
            String linha = (agen.get(i).getNome() + "," + agen.get(i).getEndereco() + "," + agen.get(i).getUsuario() + ","
                    + agen.get(i).getTipo() + "," + agen.get(i).getCpf() + "," + agen.get(i).getDatanascimento()
                    + "," + agen.get(i).getCnpj() + "," + agen.get(i).getDataabertura());
            String valores[] = linha.split(",");
            tm.addRow(valores);
        }

        view.getTabelaCliente().setModel(tm);

    }

    private void chamarCriarConta() {

        if (view.getTabelaCliente().getSelectedRow() < 0) {
            JOptionPane.showMessageDialog(null, "selecione uma linha para excluir", "ERRO", WIDTH);
        } else {

            new CriarContaPresenter(view.getTabelaCliente().getValueAt(view.getTabelaCliente().getSelectedRow(), 0).toString(),
                    view.getTabelaCliente().getValueAt(view.getTabelaCliente().getSelectedRow(), 4).toString(), "", null);
            view.revalidate();


        }
    }

    private void desbloquearSenha() {
        if (view.getTabelaCliente().getSelectedRow() < 0) {
            JOptionPane.showMessageDialog(null, "selecione uma linha para editar", "ERRo", WIDTH);
        } else if (JOptionPane.showConfirmDialog(null, "TEM CERTEZA QUE DESEJA DESATIVAR O ACESSO DO CLIENTE", "DESATIVAR GERENTE", 0, 3) == 0) {

            G = cliente.buscarUsuario(view.getTabelaCliente().getValueAt(view.getTabelaCliente().getSelectedRow(), 2).toString());
            G.setSenha("");
            clientes.editacao(G);
            JOptionPane.showMessageDialog(null, "GERENTE BLOQUEADO COM SUCESSO =)");

        }
    }
}
